package de.baumann.browser.api.net.util;

import java.util.List;

import de.baumann.browser.api.net.UserApiService;
import de.baumann.browser.api.net.base.ApiBuilder;
import de.baumann.browser.api.net.vo.AccountInfo;
import de.baumann.browser.api.net.vo.Game;
import de.baumann.browser.api.net.vo.InviteInfo;
import de.baumann.browser.api.net.vo.LoginInfo;
import de.baumann.browser.api.net.vo.OdinAndHashValue;
import de.baumann.browser.api.net.vo.OdinValue;
import de.baumann.browser.api.net.vo.Order;
import de.baumann.browser.api.net.vo.WithdrawProgress;
import de.baumann.browser.api.net.vo.QiNiuToken;
import de.baumann.browser.api.net.vo.SuperiorInfo;
import de.baumann.browser.api.net.vo.Result;
import io.reactivex.Observable;

/**
 * @author:
 * @date:2019/1/24 10:44
 * @discription: 这是和用户 相关接口的 HTTP 请求工具类
 */
public class UserHttpUtil {

    private static UserApiService userApiService;

    static {
        userApiService = ApiBuilder.buildService(UserApiService.class);
    }

    /**
     * 注册
     *
     * @param phone      手机号
     * @param password   密码
     * @param smsCode    验证码
     * @param inviteCode 邀请码
     * @return Observable
     */
    public static Observable<Result> register(String phone, String password, String smsCode, String inviteCode) {
        return userApiService.register(phone, smsCode, 86, password, inviteCode);
    }

    /**
     * 登录
     *
     * @param username 账号
     * @param password 密码
     * @return Observable
     */
    public static Observable<Result<LoginInfo>> login(String username, String password) {
        return userApiService.login(username);
    }

    /**
     * 填写邀请码
     *
     * @param username    地址
     * @param invite_code 邀请码
     * @return Observable
     */
    public static Observable<Result<String>> inviteCode(String adddress, String invite_code) {
        return userApiService.inviteCode(adddress, invite_code);
    }

    /**
     * 注销
     *
     * @param userId 用户ID
     * @return Observable
     */
    public static Observable<Result> logout(int userId) {
        return userApiService.logout(userId);
    }

    /**
     * 重置密码
     *
     * @param phone    手机号
     * @param password 密码
     * @param smsCode  验证码
     * @return Observable
     */
    public static Observable<Result> resetPassword(String phone, String password, String smsCode) {
        return userApiService.resetPassword(smsCode, 86, phone, password);
    }

    /**
     * 编辑 昵称
     *
     * @param nickname 昵称
     * @return Observable
     */
    public static Observable<Result> editNickname(String nickname) {
        return userApiService.editUserInfo(nickname, 1);
    }

    /**
     * 编辑头像
     *
     * @param headUrl
     * @return
     */
    public static Observable<Result> editHead(String headUrl) {
        return userApiService.editUserInfo(headUrl, 2);
    }

    /**
     * 编辑 QQ
     *
     * @param qq QQ号
     * @return Observable
     */
    public static Observable<Result> editQQ(String qq) {
        return userApiService.editUserInfo(qq, 3);
    }

    /**
     * 编辑 ETH 地址
     *
     * @param ethUrl eth 地址
     * @return Observable
     */
    public static Observable<Result> editEthUrl(String ethUrl) {
        return userApiService.editUserInfo(ethUrl, 4);
    }

    /**
     * 绑定手机号，获取验证码
     *
     * @param phone
     * @param password
     * @return
     */
    public static Observable<Result> bindPhoneGetCode(String phone, String password) {
        return userApiService.bindPhoneGetSmsCode(phone, 86, password);
    }

    /**
     * 绑定手机号
     *
     * @param phone 手机号码
     * @param code  验证码
     * @param type  类型 1 绑定 2 修改
     * @return Observable
     */
    public static Observable<Result> bindPhone(String phone, String code, int type) {
        return userApiService.bindPhone(phone, code, 86, type);
    }

    /**
     * 获取ODIN 记录
     *
     * @param startPage 起始页数    ###  虽然传了分页参数，但是没做分页
     * @return
     */
    public static Observable<Result<List<OdinValue>>> getOdinRecord(int startPage) {
        return userApiService.getOdinRecord(startPage, 50);
    }

    /**
     * 获取 ODIN 和 算力值
     *
     * @return
     */
    public static Observable<Result<OdinAndHashValue>> getOdinAndHashValue() {
        return userApiService.getOdinAndHashValue();
    }

    /**
     * 获取 ODIN 数据 （可用余额，冻结金额）
     *
     * @return
     */
    public static Observable<Result<AccountInfo>> getOdinData() {
        return userApiService.getOdinData();
    }


    /**
     * 充值记录
     *
     * @return
     */
    public static Observable<Result<List<Order>>> rechargeRecord() {
        return userApiService.rechargeRecord();
    }

    /**
     * 充值详情
     *
     * @param orderId
     * @return
     */
    public static Observable<Result<Order>> getRechargeDetail(String orderId) {
        return userApiService.getRechargeDetail(orderId);
    }

    /**
     * 获取QINIU Tokne
     *
     * @return
     */
    public static Observable<Result<QiNiuToken>> getQiNiuToken() {
        return userApiService.getQiNiuToken();
    }

    public static Observable<Result<InviteInfo>> getSpreadInfos() {
        return userApiService.getSpreadInfos();
    }


    public static Observable<Result<SuperiorInfo>> inviteAndPoolInfo() {
        return userApiService.inviteAndPoolInfo();
    }
}
